#include "triangle.h"
#include "circle.h"

Triangle::Triangle(QObject *parent) :
    QObject(parent),
    QGraphicsItem()
{
    angle = 0;
    setRotation(angle);
    resource = 500;
}

Triangle::~Triangle()
{

}

bool Triangle::reproduce()
{
    if (resource > 600 && qrand() % 10 == 1)
    {
        resource -= 500;
        emit signalCheckItem();
        return true;
    }
    return false;
}

QRectF Triangle::boundingRect() const
{
    return QRectF(-6,-12,12,20);   /// Ограничиваем область, в которой лежит треугольник
}

void Triangle::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
        QPolygon polygon;   /// Используем класс полигона, чтобы отрисовать треугольник
        /// Помещаем координаты точек в полигональную модель
        polygon << QPoint(0,-12) << QPoint(6,8) << QPoint(-6,8);
        painter->setBrush(Qt::red);     /// Устанавливаем кисть, которой будем отрисовывать объект
        painter->drawPolygon(polygon);  /// Рисуем треугольник по полигональной модели
        Q_UNUSED(option);
        Q_UNUSED(widget);
}

void Triangle::slotGameTimer()
{
    QList<QGraphicsItem *> foundItems = scene()->items(QPolygonF()
                                                               << mapToScene(-1, -1)
                                                               << mapToScene(-1, 1)
                                                               << mapToScene(1, 1)
                                                               << mapToScene(1, -1));
    foreach (QGraphicsItem *item, foundItems) {
        if (item == this)
            continue;
        QObject* object = dynamic_cast<QObject*>(item);
        if (object->objectName() == "circle")
        {
            if (resource < 900)
            {
                if(static_cast<Circle*>(object)->eaten()){
                    resource += 100;
                    return;
                }
            }
        }
        if (object->objectName() == "triangle")
            if (resource > 600)
            {
                if(static_cast<Triangle*>(object)->reproduce())
                {
                    resource -= 500;
                    return;
                }
            }
    }

    resource -= 25;
    if (resource <= 0)
    {
        emit remove();
        return;
    }
    if(qrand() % 6 == 1){
        if(qrand() % 2 == 1){
            angle -= 20;
            setRotation(angle);
        }
        else{
            angle += 20;
            setRotation(angle);
        }
    }
    setPos(mapToParent(0, -5));
    if(this->x() < -425){
        this->setX(425);       // слева
    }
    if(this->x() > 425){
        this->setX(-425);        // справа
    }

    if(this->y() < -425){
        this->setY(425);       // сверху
    }
    if(this->y() > 425){
        this->setY(-425);        // снизу
    }
}
